#ifndef __driver_wireless__
#define __driver_wireless__

#include <stdint.h>

#define W_ENABLE 	1
#define W_DISABLE 	0

#define W_false 	0
#define W_true 		1
#define W_bool 		uint8_t 

#define W_OK		1


extern const char *floatIdentifiers[];			
extern float floatValues[];
extern const char *stringIdentifiers[];		
extern const char *stringValues[];	
extern const char *boolIdf[];             
extern W_bool boolValue[]; 
extern const char *intIdf[];
extern uint32_t intValue[];

typedef struct {
    uint8_t receiveDataFlag;		//接收数据标志位
    uint8_t sendDataFlag;			//发送数据标志位
	uint8_t initFlag;				//无线模块初始化完成标志位
    uint16_t initErrorCode;			//无线模块初始化错误代码
	uint8_t receiveCMDFlag;			//接收命名标志位
}Wireless_TypeDef;

typedef struct 
{
	char *name;
	uint16_t value;
}OneNET_CMD;

extern Wireless_TypeDef WirelessStatus;
extern OneNET_CMD light; 	
extern OneNET_CMD cmd;

#define RX_BUFFER_SIZE 256
extern uint8_t W_RxBuffer[RX_BUFFER_SIZE];
extern uint16_t W_RxDataCnt;
extern uint8_t W_RxData; 
/**  
  * @简要  无线模块的串口初始化
  */
static void wireless_serial_init(uint32_t Baud);

/**  
  * @简要  无线模块的串口发送一个字节
  */
static void uart2_send_byte(uint8_t byte);

/**  
  * @简要  无线模块的串口发送字符串
  */
static void uart2_send_string(char *str);

/**  
  * @简要  清除无线模块缓存大小
  */
static void wireless_clear_buffer(void);

/**  
  * @简要  无线模块AT指令发送函数
  */
static uint8_t wireless_send_command(char *cmd, char *res, uint8_t sendCount, uint8_t printf_enable);

/**   
  * @简要  无线模块接收数据提取json格式的数据
  */
static char *wireless_receiver_command_to_json(char *cmd);

/**   
  * @简要  无线模块接收数据-提取id号
  */
static uint32_t wireless_get_command_id(char *jsonData);

/**   
  * @简要  无线模块接收数据后回应
  */
static void wireless_receive_command_respond(uint32_t respond_id, uint16_t code, char *msg);

/**   
  * @简要  无线模块接收数据-提取命令内容
  */
static void wireless_receiver_command_extract(char *jsonData);

/**  
  * @简要  无线模块初始化
  */
void wireless_init(void);

/**  
  * @简要  在无线模块初始化函数发送错误时执行
  */
__weak void wireless_error_handler(uint16_t ErrorCode);

/**  
  * @简要  无线模块接收回调函数
  */
void wireless_receive_callback(uint8_t byte);

/**   
  * @简要  无线模块数据上报函数
  */
void wireless_publish_data(uint8_t intCount, const char *intIdf[], uint32_t intValues[], uint8_t floatCount, const char *floatIdentifiers[], float floatValues[], uint8_t boolCount, const char *boolIdf[], W_bool boolValue[], uint8_t stringCount, const char *stringIdentifiers[], const char *stringValues[]);

/**   
  * @简要  获取无线模块数据接收标志位 
  */
uint8_t wireless_get_receive_flag(void);

/**   
  * @简要  获取无线模块命令接收标志位
  */
uint8_t wireless_get_command_flag(void);

/**   
  * @简要  无线模块接收数据-进行各类操作
  */
void wireless_receiver_command(void);

/**  
  * @简要  无线模块命令控制
  */
void wireless_command_control(void);



#endif
